package com.cg.asm.body.service.menu;

import com.cg.asm.body.domain.dto.menu.FunListRegDTO;
import com.cg.asm.body.domain.dto.menu.FunPointsDTO;
import com.cg.asm.body.domain.vo.menu.MenuListVO;
import com.cg.asm.body.domain.vo.menu.MenuPointsPagedVO;
import com.cg.asm.client.exception.MybatisExample;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface IMenuService {

    /**
     * 获取功能清单树信息
     * 使用场景：
     * 1.功能清单主页面
     *
     * @return
     */
    List<MenuListVO> getMenuTreeData();

    /**
     * 保存顶级菜单信息
     *
     * @param funListRegDTO
     * @return
     */
    void saveMenuRoot(FunListRegDTO funListRegDTO);

    /**
     * 删除功能清单
     *
     * @param funListCode
     * @return
     */
    void delMenu(String funListCode);

    /**
     * 根据菜单编码，查询菜单详细信息
     *
     * @param funListCode
     * @return
     */
    MenuListVO getMenuByCode(String funListCode);

    /**
     * 保存编辑菜单信息
     *
     * @param funListRegDTO
     */
    void saveEditMenu(FunListRegDTO funListRegDTO);

    /**
     * 获取功能清单功能点列表信息
     *
     * @param mybatisExample
     * @return
     */
    PageInfo<MenuPointsPagedVO> funPointsPagedList(MybatisExample mybatisExample);

    /**
     * 验证功能点编码是否唯一
     *
     * @param funPointsCode
     * @return
     */
    boolean funPointsCodeIsUnique(String funPointsCode);

    /**
     * 保存功能点信息
     *
     * @param funPointsDTO
     */
    void saveFunPoints(FunPointsDTO funPointsDTO);

    /**
     * 根据功能点编码删除功能点
     *
     * @param funPointsCode
     */
    void delPoints(String funPointsCode);

    /**
     * 更新功能点信息
     *
     * @param funPointsDTO
     */
    void saveEditPoints(FunPointsDTO funPointsDTO);
}
